package com.benshou.bsoa.common.util;

import com.benshou.bsoa.common.exception.BusinessException;
import lombok.NonNull;

import java.util.function.Supplier;

/**
 * 断言工具类，用于业务逻辑校验
 * 
 * @author <a href="mailto:liuzhenbang@benshou.com">Liu Zhenbang</a>
 */
public class Asserts {

    /**
     * 断言条件为真，如果为假则抛出自定义异常
     *
     * @param condition 待判断的条件
     * @param exceptionSupplier 异常提供者，用于创建要抛出的异常
     * @param <E> 异常类型
     * @throws E 当条件为假时抛出的异常
     */
    public static <E extends Exception> void isTrue(
            Boolean condition,
            @NonNull Supplier<E> exceptionSupplier
    ) throws E {
        if (condition == null || !condition) {
            throw exceptionSupplier.get();
        }
    }

    /**
     * 断言条件为真，如果为假则抛出业务异常
     *
     * @param condition 待判断的条件
     * @param message 异常消息
     * @throws BusinessException 当条件为假时抛出异常
     */
    public static void isTrue(Boolean condition, String message) {
        if (condition == null || !condition) {
            throw new BusinessException(message);
        }
    }

    /**
     * 断言条件为假，如果为真则抛出业务异常
     *
     * @param condition 待判断的条件
     * @param message 异常消息
     * @throws BusinessException 当条件为真时抛出异常
     */
    public static void isFalse(Boolean condition, String message) {
        if (condition == null || condition) {
            throw new BusinessException(message);
        }
    }
}
